home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / music / 7 / modula / lines.mod < prev    next >
Text File  |  1985-11-19  |  3KB  |  134 lines

  1.  
  2. IMPLEMENTATION MODULE Lines;
  3.  
  4. (* TDI MOSYS Atari Demo : Bouncing lines *)
  5. (* (c) TDI Software Ltd. 1985 *)
  6.  
  7. FROM GEMVDIbase IMPORT
  8.      (* types *) VDIWorkInType, VDIWorkOutType;
  9.  
  10. FROM VDIControls IMPORT
  11.      (* procs *) OpenVirtualWorkstation, CloseVirtualWorkstation ;
  12.  
  13. FROM VDIOutputs IMPORT
  14.      (* procs *) PolyLine ;
  15.  
  16. FROM VDIAttribs IMPORT
  17.      (* procs *) SetWritingMode ;
  18.  
  19. FROM AESGraphics IMPORT
  20.      (* procs *) GrafHandle;
  21.  
  22. FROM GemDem IMPORT
  23.      (* vars  *) WorkX, WorkY, WorkWidth, WorkHeight ;
  24.  
  25. (*=========================================================================*)
  26.    
  27. MODULE RandomNumbers;
  28.  
  29. EXPORT Random;
  30.  
  31. CONST M  = 100000000;
  32.       m1 = 10000;
  33.       b  = 31415821;
  34.  
  35. VAR seed : LONGCARD;
  36.  
  37. PROCEDURE Random ( maxvalue : LONGCARD ) : CARDINAL;
  38.  
  39.   PROCEDURE Multiply ( p, q : LONGCARD ) : LONGCARD;
  40.  
  41.   VAR p0, p1, q0, q1 : LONGCARD;
  42.  
  43.   BEGIN
  44.     p1 := p DIV m1;
  45.     p0 := p MOD m1;
  46.     q1 := q DIV m1;
  47.     q0 := q MOD m1;
  48.     RETURN (((p0*q1+p1*q0) MOD m1) * m1 + p0*q0) MOD M;
  49.   END Multiply;
  50.  
  51. BEGIN
  52.   seed := (Multiply (seed, b) + 1) MOD M;
  53.   RETURN CARDINAL((((seed DIV m1) * maxvalue) DIV m1) MOD 65536);
  54. END Random;
  55.  
  56. BEGIN (* MODULE *)
  57.   seed := 349867;
  58. END RandomNumbers;
  59.  
  60. (*=========================================================================*)
  61. VAR handle : INTEGER;
  62.      
  63. PROCEDURE Animation;  (* Moving line segments *)
  64.  
  65. CONST maxLines     = 20;
  66.       maxDrawLines = 4000;
  67.  
  68. TYPE LineDescr  = ARRAY [0..3] OF INTEGER;
  69.  
  70. VAR Ball,
  71.     Vel,
  72.     max          : LineDescr;
  73.     maxX, maxY, min : INTEGER ;
  74.     Lines        : ARRAY [0..maxLines-1] OF LineDescr;
  75.     index, t,
  76.     i, new, old  : INTEGER;
  77.  
  78. BEGIN
  79.   maxX := WorkX+WorkWidth ; maxY := WorkY+WorkHeight ;
  80.   max [0] := maxX; max [1] := maxY; max [2] := maxX; max [3] := maxY;
  81.   FOR i := 0 TO 3 DO
  82.     Vel [i] := Random(16)-8;
  83.     Ball [i] := Random (LONGCARD(max[i]-100)) + 50;
  84.     END;
  85.   new := 0; old := 0;
  86.   FOR index := 0 TO maxDrawLines DO
  87.     FOR i := 0 TO 3 DO 
  88.       t := Ball [i] + Vel [i];
  89.       IF t >= max [i] THEN
  90.         t := max [i] * 2 - Vel [i] - Ball [i];
  91.         Vel [i] := - Vel [i];
  92.       END;
  93.       IF ODD(i) THEN (* y coord *)
  94.         min := WorkY ;
  95.       ELSE (* x coord *)
  96.         min := WorkX ;
  97.       END ;
  98.       IF t < min THEN
  99.         IF t < 0 THEN
  100.           t := - t;
  101.         ELSE
  102.           t := min ;
  103.         END ;
  104.         Vel [i] := - Vel [i];
  105.       END;
  106.       Ball [i] := t;
  107.     END; (* FOR *)
  108.     IF (new >= maxLines) THEN         (* undraw old line *)
  109.       PolyLine (handle, 2, Lines [old MOD maxLines]);
  110.       INC (old);
  111.     END;
  112.     Lines [new MOD maxLines] := Ball;  (* draw new line *)
  113.     INC (new);
  114.     PolyLine (handle, 2, Ball);
  115.   END;  (* FOR index *)
  116. END Animation;
  117.  
  118. VAR j : INTEGER;
  119.    In : VDIWorkInType;
  120.    Out : VDIWorkOutType;
  121.  
  122. PROCEDURE DoLines ;
  123. BEGIN
  124.   handle := GrafHandle (j, j, j, j);
  125.   FOR j := 0 TO 9 DO In [j] := 1 END;
  126.   In [10] := 2;
  127.   OpenVirtualWorkstation (In, handle, Out);
  128.   j := SetWritingMode (handle, 3);
  129.   Animation;
  130.   CloseVirtualWorkstation(handle);
  131. END DoLines ;
  132.  
  133. END Lines.
  134. əəəəəəəəəəəəəəəəəəəəəəəəəəə